<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>生成器函数实例</title>
  </head>
  <body>
    <script>
      // 异步编程 文件操作 网络操作 数据库操作
      // 1s 后控制台输出 111 2s 后控制台输出 222 3s后输出 333

      // 回调地狱
      /* setTimeout(() => {
        console.log(111);
        setTimeout(() => {
          console.log(222);
          setTimeout(() => {
            console.log(333);
          }, 3000);
        }, 2000);
      }, 1000); */

      // 任务函数
      function one() {
        setTimeout(() => {
          console.log(111);
          iterator.next();
        }, 1000);
      }

      function two() {
        setTimeout(() => {
          console.log(222);
          iterator.next();
        }, 2000);
      }

      function three() {
        setTimeout(() => {
          console.log(333);
          iterator.next();
        }, 3000);
      }

      // 将三个函数的调用放在了yield中
      function* gen() {
        yield one();
        yield two();
        yield three();
      }

      // 调用生成器函数
      let iterator = gen();
      iterator.next();
    </script>
  </body>
</html>
